import { ElMessage } from "element-plus";
import type { UseFetchOptions } from "nuxt/app";
import type { IResponseDataType } from "./types";

// 泛型参数T：代表函数的返回值data具体类型
async function request<T>(
  url: string,
  options: UseFetchOptions<IResponseDataType<T>> = {}
): Promise<T> {
  /*
    设置公共请求前缀，不同环境前缀不一样
      定义了不同环境的env文件，同时定义公共请求前缀
  */

  // 如果将来要携带公共请求参数 token
  // options.headers.token = token

  const { error, data } = await useFetch(url, options);

  if (error.value) {
    // 请求失败了
    // console.log(error.value);
    ElMessage.error(error.value);
    return Promise.reject(error.value);
  }

  const responseData = data.value!; // 非空断言

  // 请求成功
  if (responseData.code === 200) {
    // 功能成功, 返回成功的数据
    return responseData.data;
  } else {
    // 功能失败
    // console.log(responseData.message);
    ElMessage.error(responseData.message);
    return Promise.reject(responseData.message);
  }
}

export default request;
